package seqlist.queue.leetcode;

import java.util.Stack;

/**
 * 双栈实现队列
 * @author yuisama
 * @date 2022/05/10 20:29
 **/
public class Num232_StackImplQueue {
    // s1永远是保存元素的栈，就对应队列
    private Stack<Integer> s1 = new Stack<>();
    // s2作为辅助，s1的栈顶元素就会弹出压入s2的栈底 => 交换顺序
    private Stack<Integer> s2 = new Stack<>();

    public void push(int x) {
        // 1.先让s1的所有元素弹出压入s2中，交换先后顺序
        while (!s1.isEmpty()) {
            s2.push(s1.pop());
        }
        // 2.s1为空，新元素直接入s1，就变为了栈底元素，就是队尾
        s1.push(x);
        // 3.再把s2中的所有元素依次弹回s1
        while (!s2.isEmpty()) {
            s1.push(s2.pop());
        }
    }

    public int pop() {
        return s1.pop();
    }

    public int peek() {
        return s1.peek();
    }

    public boolean empty() {
        return s1.isEmpty();
    }
}